#include <header.h>

int main()
{
    char *port = "9000";
    char *ip = "0.0.0.0";

    // 创建socket对象
    int socket_fd = socket(AF_INET, SOCK_STREAM, 0);

    // 要求某个端口即使处于TIME_WAIT
    // 也要求能重新使用
    int reuse = 1;
    setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));

    // 给服务端绑定端口
    struct sockaddr_in sock;
    sock.sin_family = AF_INET;// IPv4协议
    sock.sin_port = htons(atoi(port));
    sock.sin_addr.s_addr = inet_addr(ip);

    // 绑定端口和IP
    int ret = bind(socket_fd, (struct sockaddr *)&sock, sizeof(sock));
    ERROR_CHECK(ret , -1, "bind")

    // 开始监听(按照TCP的方式开始监听)
    listen(socket_fd, 10);

    printf("24:------------------ \n");
    // accept函数作用是, 从全连接队列中获取信息(看那个三次握手完毕)
    //       取出一个全新的socket对象, 用新的socket对象服务于客户端
    //    1, accept是个阻塞函数
    //    2, 每一个客户端进来之后, 应该要有一个新的socket对象为其服务
    //
    // 参数1: 去那个socket对象的全连接队列中获取信息
    // 参数2: 接收获取到的新的链接信息 (客户端的 IP  和端口  )

    struct sockaddr_in sock_client;
    socklen_t len = sizeof(sock_client);
    int net_fd = accept(socket_fd, (struct sockaddr *)&sock_client, &len);

    // sock_client: 存储的客户端的IP和端口
    printf("26:------------------:%s  \n",  inet_ntoa(sock_client.sin_addr));



    char buf[100] = {0};
    recv(net_fd, buf, sizeof(buf), 0);


    printf("buf: %s \n", buf);


    while(1);




    return 0;

}
